iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
Mobile Development

SwiftUI 男孩系列 第 4

Day 4: SwiftUI 全新的布局系統

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230918/20130138MnDNJZacy2.jpg

Photo by Casey Horner on Unsplash

https://ithelp.ithome.com.tw/upload/images/20230918/20130138mQ8VSSAhUI.png

try try body 裡的 code 改成如下

var body: some View {
    Text("Hello, SwiftUI Boys!")
}

https://ithelp.ithome.com.tw/upload/images/20230918/201301382z3oPcv5V6.png

畫一個大圈圈

將 Text("Hello, SwiftUI! Boys") 視圖替換為:

    Circle()

如果沒替換,會有兩個視圖

https://ithelp.ithome.com.tw/upload/images/20230918/20130138xO2xVhqlNY.png

在 SwiftUI 中,VStack, HStack, 和 ZStack 都是用於布局界面的容器。它們的名稱中的首字母表示它們的主要布局方向或功能。讓我解釋一下每一個:

介紹寫 SwiftUI 三大容器,可以將子視圖做排序

  • VStack (Vertical Stack) 垂直排序

https://ithelp.ithome.com.tw/upload/images/20230918/20130138rIfUjttxj8.png

  • HStack (Horizontal Stack) 水平排序
    https://ithelp.ithome.com.tw/upload/images/20230918/20130138JnzUaQLKJx.png

  • ZStack (Z- index Stack )
    https://ithelp.ithome.com.tw/upload/images/20230918/20130138YgI9am9plU.png

  • 這是一個將視圖堆疊在其它視圖上方的容器。

  • 它不是垂直或水平排列,而是按照添加的順序將視圖疊加在一起,先加入的視圖在底部,後加入的視圖在上面。

ZStack {
    RoundedRectangle(cornerRadius: 25.0)
        .fill(Color.blue)
        .padding()
    Image("Waterboys_2001")
        .resizable()
        .clipShape(Circle())
}

https://ithelp.ithome.com.tw/upload/images/20230918/201301380nzIvY0Qxv.png

妳問我圖檔從哪設定 ?
在左側導覽區 Assets,存放我圖像和顏色的特殊資料夾。

https://ithelp.ithome.com.tw/upload/images/20230918/20130138jB4Q40X5r0.png

妳問我SwiftUI 有 autolayout 嗎?

https://ithelp.ithome.com.tw/upload/images/20230918/20130138GHeVJAxxOu.png

https://ithelp.ithome.com.tw/upload/images/20230918/20130138YLvUKVebHr.png

SwiftUI 沒有 Auto Layout !!

https://ithelp.ithome.com.tw/upload/images/20230918/20130138qXXnIA282U.jpg

我召喚張三豐GPT,來教妳 SwiftUI 全新的布局系統心法。

而 Auto Layout 是 UIKit 中的布局系統,它依賴於約束來確定界面元素的位置和大小。

相反,SwiftUI 使用的是一種基於堆疊和修飾符的聲明性布局系統。這意味著你會聲明你希望的界面的外觀和行為,然後讓 SwiftUI 決定如何達到這些效果。

例如:

  1. 堆疊:你可以使用 HStack, VStack, 和 ZStack 來垂直、水平或層疊的方式組合多個視圖。

    VStack {
        Text("Hello")
        Text("World")
    }
    
    
  2. 修飾符:你可以使用修飾符來調整視圖的外觀和行為。例如,你可以使用 .padding() 來給一個視圖加上內邊距,或者使用 .frame(width:height:) 來給定具體的大小。

    Text("Hello, SwiftUI!")
        .padding(20)
        .background(Color.red)
        .cornerRadius(10)
    
    
  3. 彈性布局:你可以使用 Spacer 來推動視圖到堆疊的一側,或者分隔堆疊中的視圖。

    HStack {
        Text("Left")
        Spacer()
        Text("Right")
    }
    
    
  4. 等比例填充:使用 .frame(minWidth:idealWidth:maxWidth:minHeight:idealHeight:maxHeight:) 你可以定義視圖的大小範圍,讓它在可用空間中彈性變化。

整體來看,SwiftUI 提供了一種更簡單、更直觀的方法來建立和理解布局,特別是對於複雜的界面。而不需要像 Auto Layout 那樣考慮約束的創建和維護。


Anyway

用VStack布局界面的容器裝起來

VStack {
    Text("Hello, SwiftUI Boys!")
    Circle()
        .fill(.purple)
        .padding()
}

上一篇
Day 3:SwiftUI 初探
下一篇
Day 5: SwiftUI 奮泳向前刻 UI
系列文
SwiftUI 男孩30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言